package com.nenude.corejava.ch12;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;


public class MyFileWriter {
	public static void main(String[] args) {
		charwrite();

	}

	private static void charwrite() {

		// 以字符形式写文件
		// 编写一个程序，向c:/temp/acb/txt ，写入100行"Hello file"

		//1·通过文件进行定位，本例使用绝对路径
		File file = new File("c:/temp/abc.txt");
		//2·得到父目录，并创建父目录：mkdir，没有目录则创建，有目录则跳过
		file.getParentFile().mkdirs();
		//定义一个写文件的字符流
		FileWriter writer = null;

		try {
			
			if (!file.exists()) {// 判断文件是否存在，不存在则创建
				file.createNewFile();
			}

			
			file.createNewFile();
			System.out.println("新建文件成功！");
			// true：以追加的方式打开文件流;默认参数为false ，会清空原有内容，重新写入数据
			//writer = new FileWriter(file, true);
			writer = new FileWriter(file); //默认为false，不会产生追加效果
			for(int i=0;i<10;i++){
				String str="你好,中国，java文件读写"+i+"\r\n";
				writer.write(str);//字符流可以使用char数组或字符串进行输出 数据				
			    writer.flush();//每写入一次都会刷新一次；刷新缓存池
			}

		} catch (IOException e) {
			
			//熟悉10~15个最常用异常的调试思路:如何检查代码，如何修改代码
			e.printStackTrace();
		}finally{
			if(writer!=null){
				try {
					
					writer.close();//调用close方法前会默认调用flush刷新缓存
					
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	//写数据：方法2
	private static void byteWrite() {

		// 编写一个程序，向c:/temp/acb/txt ，写入100行"Hello file"

		File file = new File("c:/temp/abc.txt");

		// 创建父类文件目录
		file.getParentFile().mkdirs();

		// 构建一个输出流
		FileOutputStream outputStream = null;

		try {
			// 以字节流形式写文件

			if (file.exists()) {// 判断文件是否存在
				// file.deleteOnExit();
				file.delete();
				System.out.println("删除成功");
			}

			file.createNewFile();// 创建文件

			outputStream = new FileOutputStream(file);

			for (int i = 0; i < 100; i++) {

				String str = "Hello file" + i + "\r\n";
				// String str = "Hello file" + i + "\n\r\n";//: \r是return（回车）
				// 的缩写;换行符

				byte[] b = str.getBytes();// 字节流写数据时，需要把数据转换成字节数组
				outputStream.write(b);// 把字节数组写入到文件中(从程序输出到文件)
				outputStream.flush();// 强制刷新缓存，把数据输出到文件中

			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {// 关闭文件流
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

}
